package Bridge;

// 1. 像素矩阵类
class Matrix {
    private int[][] pixels;

    public Matrix(int width, int height) {
        this.pixels = new int[width][height];
        // 初始化像素数据...
    }

    // 添加像素操作方法
    public void setPixel(int x, int y, int value) {
        pixels[x][y] = value;
    }

    public int getPixel(int x, int y) {
        return pixels[x][y];
    }
}

// 2. 实现部分接口（操作系统绘制）
interface ImageImp {
    void doPaint(Matrix m);
}

// 3. 具体操作系统实现
class WindowsImp implements ImageImp {
    @Override
    public void doPaint(Matrix m) {
        System.out.println("在Windows系统上绘制图像");
        // 调用Windows API绘制...
    }
}

class UnixImp implements ImageImp {
    @Override
    public void doPaint(Matrix m) {
        System.out.println("在Unix系统上绘制图像");
        // 调用Unix系统绘图API...
    }
}

class LinuxImp implements ImageImp {
    @Override
    public void doPaint(Matrix m) {
        System.out.println("在Linux系统上绘制图像");
        // 调用Linux系统绘图API...
    }
}

// 4. 抽象部分（图像抽象类）
abstract class Image {
    protected ImageImp imp;

    public void setImageImp(ImageImp imp) {
        this.imp = imp;
    }

    public abstract void parseFile(String fileName);
}

// 5. 具体图像格式类
class JPGImage extends Image {
    @Override
    public void parseFile(String fileName) {
        System.out.println("解析JPG文件: " + fileName);
        Matrix m = new Matrix(1024, 768);
        // 解析JPG文件到像素矩阵...
        imp.doPaint(m);
    }
}

class PNGImage extends Image {
    @Override
    public void parseFile(String fileName) {
        System.out.println("解析PNG文件: " + fileName);
        Matrix m = new Matrix(800, 600);
        // 解析PNG文件到像素矩阵...
        imp.doPaint(m);
    }
}

class BMPImage extends Image {
    @Override
    public void parseFile(String fileName) {
        System.out.println("解析BMP文件: " + fileName);
        Matrix m = new Matrix(1280, 1024);
        // 解析BMP文件到像素矩阵...
        imp.doPaint(m);
    }
}

class GIFImage extends Image {
    @Override
    public void parseFile(String fileName) {
        System.out.println("解析GIF文件: " + fileName);
        Matrix m = new Matrix(640, 480);
        // 解析GIF文件到像素矩阵...
        imp.doPaint(m);
    }
}

// 6. 客户端使用示例
public class ImageViewer {
    public static void main(String[] args) {
        // 创建不同操作系统实现
        ImageImp windows = new WindowsImp();
        ImageImp linux = new LinuxImp();

        // 创建不同格式图像
        Image jpg = new JPGImage();
        Image png = new PNGImage();

        // Windows系统显示JPG
        jpg.setImageImp(windows);
        jpg.parseFile("sample.jpg");

        // Linux系统显示PNG
        png.setImageImp(linux);
        png.parseFile("test.png");

        // 动态切换系统实现
        Image bmp = new BMPImage();
        bmp.setImageImp(windows);
        bmp.parseFile("photo.bmp");

        bmp.setImageImp(linux);
        bmp.parseFile("photo.bmp");
    }
}
